<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <script src="../vue.js"></script>
  </head>

  <body>
    <div id="app">
      <App></App>
    </div>
    <script>
      Vue.config.productionTip = false;

      /* 
      创建组件:
        * Vue.extend(options):
          - options的写法和new Vue时的options写法类似,只是没有el选项,因为只有vm决定服务哪一个容器,而组件都是基于vm的
          - 我们希望给每一个组件都添加一个name配置项,代表当前组件的名称,目前的作用是为了在开发者工具区分组件
          - Vue.extend返回一个VueComponent构造函数,每次组件在使用的时候,都会被实例化,得到一个组件实例
          - 组件的模板有且只能有一个根元素
      
      组件的使用:
        * 首先创建一个组件,得到一个VueComponent构造函数
        * 要在父组件中或者vm实例中进行注册,才可以使用,需要使用components配置项进行注册
        * 在模板中通过标签的方式使用组件,单双标签都可以(在非单文件组件中,组件尽量写成双标签)
      */

      const App = Vue.extend({
        name: "APP",
        template: `
          <h1>App {{message}}</h1>
        `,
        data() {
          return {
            message: "hello",
          };
        },
      });

      console.log(App, "App"); //VueComponent构造函数

      const vm = new Vue({
        el: "#app",
        components: {
          App,
        },
        data() {
          return {};
        },
      });
    </script>
  </body>
</html>
